package com.example.teaculture.tools;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.os.Build;
import android.widget.DatePicker;
import android.widget.TextView;

import androidx.annotation.RequiresApi;
import androidx.appcompat.widget.SearchView;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.regex.Pattern;

public class DateUtils {
    /**
     * yyyy-MM-dd 或者 yyyy-M-dd
     **/
    private static String DATE_REGEX = "^([1-9]\\d{3}-)(([0]{0,1}[1-9]-)|([1][0-2]-))(([0-3]{0,1}[0-9]))$";
    static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    /***
     * @desc 校验日期的格式，yyyy-MM-dd，无法校验dd的完整性，
     * 就是可能出现 2020-2-32，2020-1-33这样的天数，可以通过设置日期的严禁性来转成日期，若报错则日期不正确
     * @author fanzhen
     * @date 2020-05-28 18:50
     * @param
     * @param datestr：日期，格式：yyyy-MM-dd
     * @return boolean
     */
    public static boolean validDateEffecitive(String datestr) throws Exception {
        boolean matches = Pattern.matches(DATE_REGEX, datestr);
        if (!matches) {
            return matches;
        }
        //设置日期格式转的严谨性
        sdf.setLenient(false);
        try {
            sdf.parse(datestr);
        } catch (ParseException e) {
            e.printStackTrace();
            return false;
        }
        return matches;
    }

    public static void showDatePickerDialog(Activity activity, int themeResId, final SearchView sv, Calendar calendar) {
        // 直接创建一个DatePickerDialog对话框实例，并将它显示出来
        // 绑定监听器(How the parent is notified that the date is set.)
        new DatePickerDialog(activity, themeResId, (view, year, monthOfYear, dayOfMonth) -> {
            // StringUtils.leftPad() 左侧补齐 第一个参数：原始字符串，第二个参数：字符串的长度，第三个是补充的字符串
            String month = (monthOfYear + 1) > 10 ? String.valueOf(monthOfYear + 1) : "0" + (monthOfYear + 1);
            String day = dayOfMonth > 10 ? String.valueOf(dayOfMonth) : "0" + dayOfMonth;
            // 此处得到选择的时间，可以进行你想要的操作
            sv.setQuery(year + "-" + month + "-" + day, true);
        }
                // 设置初始日期
                , calendar.get(Calendar.YEAR)
                , calendar.get(Calendar.MONTH)
                , calendar.get(Calendar.DAY_OF_MONTH)).show();
    }

}
